#include "Key.h"
#include "GPIO.h"
#include "Light.h"

#define IS_KEY_UP(key)		(states & (1 << key)) > 0
#define IS_KEY_DOWN(key)	(states & (1 << key)) == 0
#define SET_KEY_UP(key)		states |= (1 << key)
#define SET_KEY_DOWN(key)	states &=~(1 << key)

u8 states=0x0F;
u8 key3_temp=0;

void Key_init(){
	P5_MODE_IO_PU(GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
}


void KEY_UP_DOWN() {
  if(KEY1==1 && IS_KEY_DOWN(0)) {
    //printf("KEY1 up\n");
		Key_up_1();

    SET_KEY_UP(0);
  } else if(KEY1==0 && IS_KEY_UP(0) ) {
    //printf("KEY1 down\n");
    GREEN=0;
		Key_down_1();
		SET_KEY_DOWN(0);
  }
  if(KEY2==1 && IS_KEY_DOWN(1)) {
    //printf("KEY2 up\n");
		Key_up_2();
    SET_KEY_UP(1);
  } else if(KEY2==0 && IS_KEY_UP(1) ) {
    //printf("KEY2 down\n");
		Key_down_2();
    SET_KEY_DOWN(1);

  }
  if(KEY3==1 && IS_KEY_DOWN(2)) {
    //printf("KEY3 up\n");
		Key_up_3();
    SET_KEY_UP(2);
  } else if(KEY3==0 && IS_KEY_UP(2) ) {
    //printf("KEY3 down\n");
		Key_down_3(key3_temp);
		key3_temp=!key3_temp;
    SET_KEY_DOWN(2);
  }
  if(KEY4==1 && IS_KEY_DOWN(3)) {
    //printf("KEY4 up\n");
    SET_KEY_UP(3);
  } else if(KEY4==0 && IS_KEY_UP(3) ) {
    //printf("KEY4 down\n");
    SET_KEY_DOWN(3);
  }

}